#include "config.hpp"
#include <fstream>

Config& Config::getInstance() {
    static Config instance;
    return instance;
}

void Config::load(const std::string& configPath) {
    std::ifstream file(configPath);
    if (!file.is_open()) {
        return; // Use default values if config file doesn't exist
    }

    try {
        nlohmann::json config;
        file >> config;

        // Server settings
        if (config.contains("server")) {
            host_ = config["server"].value("host", host_);
            port_ = config["server"].value("port", port_);
        }

        // MySQL settings
        if (config.contains("mysql")) {
            mysqlHost_ = config["mysql"].value("host", mysqlHost_);
            mysqlPort_ = config["mysql"].value("port", mysqlPort_);
            mysqlUser_ = config["mysql"].value("user", mysqlUser_);
            mysqlPassword_ = config["mysql"].value("password", mysqlPassword_);
            mysqlDatabase_ = config["mysql"].value("database", mysqlDatabase_);
        }

        // Redis settings
        if (config.contains("redis")) {
            redisHost_ = config["redis"].value("host", redisHost_);
            redisPort_ = config["redis"].value("port", redisPort_);
        }
    } catch (const std::exception& e) {
        // Log error and use default values
    }
} 